/* eslint-disable no-param-reassign */
import qs from 'qs';
// import { useUserStore } from '@/stores';
import cache from '@/utils/cache';

export type CustomRequestOptions = UniApp.RequestOptions & {
  query?: Record<string, any>;
} & IUniUploadFileOptions; // 添加uni.uploadFile参数类型

// 请求基地址 这个地方不要轻易修改
let baseURL = import.meta.env.VITE_SERVER_BASEURL;
// #ifdef APP-PLUS
if (import.meta.env.VITE_USER_NODE_ENV === 'development') {
  baseURL = import.meta.env.VITE_PROXY_TARGET_BASEURL;
}
// #endif

// 拦截器配置
const httpInterceptor = {
  // 拦截前触发
  invoke(options: CustomRequestOptions) {
    // 接口请求支持通过 query 参数配置 queryString
    if (options.query) {
      const queryStr = qs.stringify(options.query);
      if (options.url.includes('?')) {
        options.url += `&${queryStr}`;
      } else {
        options.url += `?${queryStr}`;
      }
    }

    // 1. 非 http 开头需拼接地址
    if (!options.url.startsWith('http')) {
      options.url = baseURL + options.url;
    }
    // 2. 请求超时
    options.timeout = 50000; // 10s
    // 3. 添加小程序端请求头标识
    options.header = {
      platform: 'mp-weixin', // 可选值与 uniapp 定义的平台一致，告诉后台来源
      ...options.header,
    };
    // 4. 添加 token 请求头标识
    const token = cache.getToken();
    if (token) {
      options.header['Authorization'] = `Bearer ${options.header.token || token}`;
    }

    // 统一增加TENANT-ID请求头
    const tenantId = cache.getTenant();
    if (tenantId) {
      options.header['TENANT-ID'] = tenantId;
    }

    const currentMenuId = cache.get('currentMenuId');
    if (currentMenuId) {
      options.header['Menu-Id'] = currentMenuId;
    }

    const Version = cache.get('VERSION') || import.meta.env.VITE_REQUEST_VERSION;
    if (Version) {
      options.header['VERSION'] = Version;
    }
  },
};

export const requestInterceptor = {
  install() {
    // 拦截 request 请求
    uni.addInterceptor('request', httpInterceptor);
    // 拦截 uploadFile 文件上传
    uni.addInterceptor('uploadFile', httpInterceptor);
  },
};
